<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=2">
<meta name="theme-color" content="#222">
<meta name="generator" content="Hexo 4.0.0">
  <link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png">
  <link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png">
  <link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png">
  <link rel="mask-icon" href="/images/logo.svg" color="#222">
  <link rel="alternate" href="/atom.xml" title="dy2903的博客" type="application/atom+xml">

<link rel="stylesheet" href="/css/main.css">


<link rel="stylesheet" href="/lib/font-awesome/css/font-awesome.min.css">


<script id="hexo-configurations">
  var NexT = window.NexT || {};
  var CONFIG = {
    root: '/',
    scheme: 'Pisces',
    version: '7.5.0',
    exturl: false,
    sidebar: {"position":"left","display":"post","offset":12,"onmobile":false},
    copycode: {"enable":false,"show_result":false,"style":null},
    back2top: {"enable":true,"sidebar":false,"scrollpercent":false},
    bookmark: {"enable":false,"color":"#222","save":"auto"},
    fancybox: false,
    mediumzoom: false,
    lazyload: false,
    pangu: false,
    algolia: {
      appID: '',
      apiKey: '',
      indexName: '',
      hits: {"per_page":10},
      labels: {"input_placeholder":"Search for Posts","hits_empty":"We didn't find any results for the search: ${query}","hits_stats":"${hits} results found in ${time} ms"}
    },
    localsearch: {"enable":false,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false},
    path: '',
    motion: {"enable":true,"async":false,"transition":{"post_block":"fadeIn","post_header":"slideDownIn","post_body":"slideDownIn","coll_header":"slideLeftIn","sidebar":"slideUpIn"}},
    translation: {
      copy_button: 'Copy',
      copy_success: 'Copied',
      copy_failure: 'Copy failed'
    },
    sidebarPadding: 40
  };
</script>

  <meta name="description" content="【大话存储II】学习笔记（15章），块级集群存储系统里面分析的主要是块集群系统，同样文件级存储也可以集群化。 因为NAS系统的前端网络是以太网，速度比较低，导致NAS主要用于一些非关键业务中，比如文件共享。但是一些特殊应用也需要多主机同时访问某个大文件，比如3D渲染集群等。如果我们使用块集群存储系统，则会存在一个问题，需要在应用程序上引入文件锁，而NAS的文件系统一般都自带有文件锁机制，所以还不如">
<meta property="og:type" content="article">
<meta property="og:title" content="大话存储，学习笔记（15章），文件级集群系统">
<meta property="og:url" content="https:&#x2F;&#x2F;duyang2903.gitee.io&#x2F;2019&#x2F;11&#x2F;15&#x2F;%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%8815%E7%AB%A0%EF%BC%89%EF%BC%8C%E6%96%87%E4%BB%B6%E7%BA%A7%E9%9B%86%E7%BE%A4%E7%B3%BB%E7%BB%9F&#x2F;index.html">
<meta property="og:site_name" content="dy2903的博客">
<meta property="og:description" content="【大话存储II】学习笔记（15章），块级集群存储系统里面分析的主要是块集群系统，同样文件级存储也可以集群化。 因为NAS系统的前端网络是以太网，速度比较低，导致NAS主要用于一些非关键业务中，比如文件共享。但是一些特殊应用也需要多主机同时访问某个大文件，比如3D渲染集群等。如果我们使用块集群存储系统，则会存在一个问题，需要在应用程序上引入文件锁，而NAS的文件系统一般都自带有文件锁机制，所以还不如">
<meta property="og:locale" content="en">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-41e97a152f2ddbc3.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-62c18f207bc60d7e.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-33c4e044349bfd9e.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-d751f906c172fada.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-0f0fd95485e57019.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-bbc2b6152b74dba4.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-18f18d67b848209d.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-bef4f51847587ea8.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-883578512edab3d3.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-38e82c4c49a75ae6.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-f2756c4b557e96f4.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-7c2b48b40d637039.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-0e7504381907bb9b.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-f11d7b9e5e11a37f.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-b97ca150bd720d86.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-26acfccdf419e937.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-3da128de25e8c0a9.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-3cfad636b406130f.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-2181a3bba971673c.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-24f7ab844b784e37.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-6ea944363fa48bac.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">
<meta property="og:updated_time" content="2019-11-13T13:27:14.000Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="http:&#x2F;&#x2F;upload-images.jianshu.io&#x2F;upload_images&#x2F;1323506-41e97a152f2ddbc3.png?imageMogr2&#x2F;auto-orient&#x2F;strip%7CimageView2&#x2F;2&#x2F;w&#x2F;1240">

<link rel="canonical" href="https://duyang2903.gitee.io/2019/11/15/%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%8815%E7%AB%A0%EF%BC%89%EF%BC%8C%E6%96%87%E4%BB%B6%E7%BA%A7%E9%9B%86%E7%BE%A4%E7%B3%BB%E7%BB%9F/">


<script id="page-configurations">
  // https://hexo.io/docs/variables.html
  CONFIG.page = {
    sidebar: "",
    isHome: false,
    isPost: true,
    isPage: false,
    isArchive: false
  };
</script>

  <title>大话存储，学习笔记（15章），文件级集群系统 | dy2903的博客</title>
  






  <noscript>
  <style>
  .use-motion .brand,
  .use-motion .menu-item,
  .sidebar-inner,
  .use-motion .post-block,
  .use-motion .pagination,
  .use-motion .comments,
  .use-motion .post-header,
  .use-motion .post-body,
  .use-motion .collection-header { opacity: initial; }

  .use-motion .site-title,
  .use-motion .site-subtitle {
    opacity: initial;
    top: initial;
  }

  .use-motion .logo-line-before i { left: initial; }
  .use-motion .logo-line-after i { right: initial; }
  </style>
</noscript>

</head>

<body itemscope itemtype="http://schema.org/WebPage">
  <div class="container use-motion">
    <div class="headband"></div>

    <header class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"><div class="site-brand-container">
  <div class="site-meta">

    <div>
      <a href="/" class="brand" rel="start">
        <span class="logo-line-before"><i></i></span>
        <span class="site-title">dy2903的博客</span>
        <span class="logo-line-after"><i></i></span>
      </a>
    </div>
        <p class="site-subtitle">与肝胆人共事，从无字句读书</p>
  </div>

  <div class="site-nav-toggle">
    <div class="toggle" aria-label="Toggle navigation bar">
      <span class="toggle-line toggle-line-first"></span>
      <span class="toggle-line toggle-line-middle"></span>
      <span class="toggle-line toggle-line-last"></span>
    </div>
  </div>
</div>


<nav class="site-nav">
  
  <ul id="menu" class="menu">
        <li class="menu-item menu-item-home">

    <a href="/" rel="section"><i class="fa fa-fw fa-home"></i>Home</a>

  </li>
        <li class="menu-item menu-item-archives">

    <a href="/archives/" rel="section"><i class="fa fa-fw fa-archive"></i>Archives</a>

  </li>
  </ul>

</nav>
</div>
    </header>

    
  <div class="back-to-top">
    <i class="fa fa-arrow-up"></i>
    <span>0%</span>
  </div>


    <main class="main">
      <div class="main-inner">
        <div class="content-wrap">
          

          <div class="content">
            

  <div class="posts-expand">
      
  
  
  <article itemscope itemtype="http://schema.org/Article" class="post-block " lang="en">
    <link itemprop="mainEntityOfPage" href="https://duyang2903.gitee.io/2019/11/15/%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%8815%E7%AB%A0%EF%BC%89%EF%BC%8C%E6%96%87%E4%BB%B6%E7%BA%A7%E9%9B%86%E7%BE%A4%E7%B3%BB%E7%BB%9F/">

    <span hidden itemprop="author" itemscope itemtype="http://schema.org/Person">
      <meta itemprop="image" content="/images/avatar.gif">
      <meta itemprop="name" content="dy2903">
      <meta itemprop="description" content="">
    </span>

    <span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization">
      <meta itemprop="name" content="dy2903的博客">
    </span>
      <header class="post-header">
        <h1 class="post-title" itemprop="name headline">
          大话存储，学习笔记（15章），文件级集群系统
        </h1>

        <div class="post-meta">
            <span class="post-meta-item">
              <span class="post-meta-item-icon">
                <i class="fa fa-calendar-o"></i>
              </span>
              <span class="post-meta-item-text">Posted on</span>

              <time title="Created: 2019-11-15 10:48:24" itemprop="dateCreated datePublished" datetime="2019-11-15T10:48:24+08:00">2019-11-15</time>
            </span>
              <span class="post-meta-item">
                <span class="post-meta-item-icon">
                  <i class="fa fa-calendar-check-o"></i>
                </span>
                <span class="post-meta-item-text">Edited on</span>
                <time title="Modified: 2019-11-13 21:27:14" itemprop="dateModified" datetime="2019-11-13T21:27:14+08:00">2019-11-13</time>
              </span>

          

        </div>
      </header>

    
    
    
    <div class="post-body" itemprop="articleBody">

      
        <p><a href="https://www.jianshu.com/p/2f8ede83b183" target="_blank" rel="noopener">【大话存储II】学习笔记（15章），块级集群存储系统</a>里面分析的主要是块集群系统，同样文件级存储也可以集群化。</p>
<p>因为NAS系统的前端网络是以太网，速度比较低，导致NAS主要用于一些非关键业务中，比如文件共享。但是一些特殊应用也需要多主机同时访问某个大文件，比如3D渲染集群等。如果我们使用块集群存储系统，则会存在一个问题，需要在应用程序上引入<strong>文件锁</strong>，而NAS的文件系统一般都自带有文件锁机制，所以还不如把NAS存储系统进行集群化。</p>
<p>在谈怎么样把NAS系统进行集群化之前，我们说说<strong>集群文件系统</strong>的架构。集群文件系统是个很宽泛的概念，分布式文件系统、并行文件系统、共享文件系统统都可以称为<code>集群文件系统</code>。</p>
<h1 id="集群文件系统"><a href="#集群文件系统" class="headerlink" title="集群文件系统"></a>集群文件系统</h1><p>集群文件系统，顾名思义，就是把提供文件存储的设备进行集群化。一般来说，我们可以使用一堆服务器来提供文件服务。</p>
<p>本章中，我们首先对集群文件系统架构进行分类，主要有如下几种</p>
<ul>
<li><p>共享与非共享存储型集群</p>
</li>
<li><p>对称与非对称集群</p>
</li>
<li><p>自助型与服务型集群</p>
</li>
<li><p>SPI与SFI型集群</p>
</li>
<li><p>串行与并行集群</p>
</li>
</ul>
<h2 id="是否共享LUN"><a href="#是否共享LUN" class="headerlink" title="是否共享LUN"></a>是否共享LUN</h2><p>我们可以按照集群是否有共享LUN将架构分为共享存储集群和非共享存储集群</p>
<ul>
<li><p>共享存储集群</p>
<p>  集群的所有节点都是共享使用后端存储的，注意这里的共享不是说共享磁盘阵列，而是说可以<strong>共享访问同一个LUN。</strong><br><img src="http://upload-images.jianshu.io/upload_images/1323506-41e97a152f2ddbc3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"><br>  这就引出另一个问题了，多主机同时读写同一个LUN里面的文件，<strong>如何保证数据一致性？</strong></p>
<p>  无法保证数据一致性的原因在于存在多个独立的文件系统逻辑，每个客户端都要维护自己的文件系统缓存，而且它们之间不互相通信。</p>
<p>  我们可以直接把多余的文件系统实例去除掉，只保留一份文件系统逻辑，这就形成了共享式SAN文件系统了。</p>
<p>  下图为传统的架构。多个主机共同访问一个LUN的文件，会产生数据不一致。因为主机各自为政，任意一台客户端要访问目标文件的时候，会向自身内存中的文件系统发起请求，从而执行IO。<br><img src="http://upload-images.jianshu.io/upload_images/1323506-62c18f207bc60d7e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"><br>  下图是进化后的架构，只需要有一个客户端主机上保留一份文件系统，也就是<strong>元数据服务器</strong>。所以客户端要访问文件的时候，需要先通过网络向元数据服务器发出请求，然后自行向目标发起访问。</p>
</li>
</ul>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-33c4e044349bfd9e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<ul>
<li><p>非共享存储集群</p>
<p>  与共享存储集群相反则是非共享存储集群，每个节点都独占一个LUN。当然集群也可以使用同一台磁盘阵列，但是各自的存储空间是之前划分好的，只能自己访问，别人不能访问。<br><img src="http://upload-images.jianshu.io/upload_images/1323506-d751f906c172fada.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
</li>
</ul>
<p>同样我们也可以单独剥离出<strong>元数据服务器</strong>，然后把后端主机并行化。<br>这样的好处在于，客户端从存储节点读取数据的时候，完全可以<strong>并行访问</strong>。可以大大提升访问效率。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-0f0fd95485e57019.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"><br>共享与非共享存储集群对比如下：</p>
<ul>
<li><p>读写数据的过程：当某节点需要访问其他节点上的数据的时候，</p>
<ul>
<li><p>共享存储集群：每个节点可以直接对后端存储中的LUN进行读写，前端传输的只有元数据，而没有实际数据流量。</p>
</li>
<li><p>非共享存储的集群文件系统：如果要访问非当前节点的数据，需要通过前端网络进行传输，速度较慢。</p>
</li>
</ul>
</li>
</ul>
<ul>
<li><p>缓存一致性：共享存储需要考虑缓存一致性，一般来说需要把写缓存给关了，非共享式不需要考虑。</p>
</li>
<li><p>某节点故障以后：共享存储，一个节点故障，另外的节点可以直接接管。非共享存储，为了防止单点故障，需要将每个节点的数据镜像一份到其他节点。</p>
</li>
<li><p>是否需要使用SAN阵列：共享存储必须使用SAN阵列，非共享式集群可以不使用SAN阵列，服务器节点的本地槽位多的话，可以使用本地磁盘，但是不可使用DAS磁盘箱。</p>
</li>
</ul>
<p><code>非共享存储型文件系统</code>又可称为“<code>分布式文件系统</code>”，即数据分布存放在集群中多个节点上。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-bbc2b6152b74dba4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<h2 id="是否引入IO节点"><a href="#是否引入IO节点" class="headerlink" title="是否引入IO节点"></a>是否引入IO节点</h2><p>上一小节中讲的架构中，客户端可以直接访问到共享存储。</p>
<p>实际上可以在插入一个中间层，可以对后端文件以另一种形式进行输出。</p>
<p>比如</p>
<ul>
<li><p>比如在LUN上层引入了对象存储网关，则就是对象存储。</p>
<p>  需要客户端需要使用支持OSD协议的代理，比如pNFS</p>
</li>
<li><p>如果引入了私有设备，则需要使用相应的代理。</p>
</li>
<li><p>如果引入了NAS头，则形成了集群NAS，对外只需要使用标准的NFS客户端即可。</p>
<p>  典型代表是：Panasas , Lustre , Ibrix</p>
</li>
</ul>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-18f18d67b848209d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p>终上所述，集群文件系统最后演化成了两种：</p>
<ul>
<li><p>客户端直接访问后端SAN</p>
</li>
<li><p>客户端和后端FC SAN 之间引入IO节点的模式</p>
</li>
</ul>
<p>这两种方式各有其优劣</p>
<ul>
<li><p>客户端直接访问SAN的模式，客户端与后端的磁盘阵列没有其他的处理模块，IO效率最高。</p>
<p>  但是成本随着客户端的增加而增加，因为目前FC HBA卡非常贵，如果每个客户端安装FC HBA卡，成本将非常高。此外，因为后端LUN都由元数据服务器来挂载，存在单点故障，一旦元数据服务器出问题了，则系统就瘫痪</p>
</li>
<li><p>客户端与SAN之间引入了IO节点的模式：</p>
<p>  客户端可以使用便宜一点的<code>以太网</code>来进行IO节点的访问，另一方面如Ibrix这样所有节点的角色对等的架构，每个节点都是MDS和IO节点，这样的话，一旦某个IO节点故障，则其他任何一个IO节点就可以接管故障节点的资源，容错率高了很多。</p>
<p>  当然有利必有弊，IO效率相对就比较低了，而且受以太网速率的限制，客户端IO速度也不高。</p>
</li>
</ul>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-bef4f51847587ea8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<h2 id="角色是否对等"><a href="#角色是否对等" class="headerlink" title="角色是否对等"></a>角色是否对等</h2><p>可以根据每个节点的角色是否对等分为对称式和非对称式文件系统。</p>
<p> 所谓<strong>对称式集群文件系统</strong>指的是集群中所有节点的角色和任务都相同，完全等价。</p>
<p>在对称式集群中，所有节点都很<code>聪明</code>，每时每刻都能保持精确沟通与合作，共同掌管全局文件系统的元数据。每个节点要更新某元数据的时候，需要先将其<strong>锁住</strong>，其他节点就必须等待，<strong>这样节点之间的沟通量就很大。</strong></p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-883578512edab3d3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p>所有节点在同一时刻均看到同一片景像。</p>
<p>那么<strong>非对称式集群</strong>呢？</p>
<p>在非对称集群中，只有少数节点（主备节点）是聪明的，他们掌管着系统内全局文件系统信息，其他节点不清楚。</p>
<p>当其他节点要访问某文件的时候，需要首先联系这个聪明节点，得到要访问文件的具体信息（比如存放在哪个节点中的哪的LUN的什么地址里面。）</p>
<p>每个傻节点上需要安装一个<code>代理</code>客户端来于聪明节点通信，它获得了文件的具体信息之后，才能让主机从后端的LUN中拉取数据。</p>
<p>我们把<code>聪明</code>的节点叫<code>Metadata Server, MDS或者MDC</code>，是系统中唯一掌握文件系统元数据的角色。</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-38e82c4c49a75ae6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p>那么对称集群文件系统与非对称的典型代表是哪些？</p>
<ul>
<li><p>对称式集群：Veritas ClusterFS , HP Ibrix</p>
</li>
<li><p>非对称式集群：中科蓝鲸BWFS，EMC MPFS</p>
</li>
</ul>
<p>显然这两种架构各有优劣势。</p>
<ul>
<li><p>非对称式集群易于实现，沟通成本低，对应的产品也多。</p>
<p>  客户端只能通过元数据服务器进行挂载，所以性能受限于元数据服务器，不过我们可以引入多个元数据节点来均摊负载。</p>
</li>
<li><p>对称式集群文件系统：因为所有节点的地位相同，所以挂载任何一个节点的目录即可，但是节点之间构成的复杂度高，不利于扩展。</p>
<p>  当节点少的时候，由于对称式集群中每个节点都可以充当<strong>元数据服务器</strong>的角色，所以性能更好。</p>
</li>
</ul>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-f2756c4b557e96f4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<h2 id="是否对外提供服务"><a href="#是否对外提供服务" class="headerlink" title="是否对外提供服务"></a>是否对外提供服务</h2><p>按照是否对外提供服务分为自助型和服务型</p>
<p>什么叫<strong>自助型集群</strong>？就是应用是使用本地磁盘的，比如一个集群中每个节点都安装了某种应用，然后现在有共享系统内所有文件的需求，就可以在<strong>应用节点上</strong>直接部署集群文件系统。</p>
<p>所以每个节点不但是数据的生产者，还是底层文件的消费者,这就是<code>自助型</code></p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-7c2b48b40d637039.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p>那什么是<code>服务型集群文件系统</code>，如下图。</p>
<p>框内是集群文件系统，框外又增加了一排主机，群外的客户端主机通过某种协议来访问集群中文件数据。</p>
<p>集群中的服务节点不是数据的消费者，只是服务者</p>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-0e7504381907bb9b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p>为什么要使用服务型集群呢？自助型不是挺好的吗？主要原因如下</p>
<ul>
<li><p>降低成本。自助型集群中每个节点都需要高速网卡，比如FC HBA卡，集群规模扩大，则成本也会扩大。</p>
</li>
<li><p>可以接入更多的客户端</p>
<p>  可以用较少的节点服务于更多的客户端主机。而且内部沟通信息量更小。<br><img src="http://upload-images.jianshu.io/upload_images/1323506-f11d7b9e5e11a37f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
</li>
</ul>
<h2 id="统一路径型与统一文件系统型集群"><a href="#统一路径型与统一文件系统型集群" class="headerlink" title="统一路径型与统一文件系统型集群"></a>统一路径型与统一文件系统型集群</h2><p>之前我们讲过，为了实现集群的<code>Single Name Space</code>统一命名空间，有两种方式</p>
<ul>
<li>懒人做法：既然每个节点都有各自的文件系统，那么就直接把输出路径虚拟化一下，集中管理起来就OK。再向外输出一个Single Path Image。只管路径统一，放在那里不管。典型代表就是微软的DFS</li>
</ul>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-b97ca150bd720d86.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<ul>
<li>勤快人做法：让每个节点都知道所有文件的位置，在文件系统层进行整合而不只是在表层路径上进行整合，即Single FileSystem Image。典型代表，CFS等大多数集群FS。</li>
</ul>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-26acfccdf419e937.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p>SFI的优点在于可以将一个文件切分到各个节点中，这是SPI无法做到。</p>
<p>但是SFI的扩展性能往往比较有限，SPI则可以整合大量的节点。这是因为SFI的集群FS的节点之间需要同步复杂的状态，每个节点所维护的状态机非常复杂，当节点数量增加的时候，<strong>节点状态机</strong>的协同加上<strong>网络延迟</strong>，性能自然上不去。<br>而SPI模式下，节点相互独立，同步的信息很少。。</p>
<h2 id="串行与并行集群"><a href="#串行与并行集群" class="headerlink" title="串行与并行集群"></a>串行与并行集群</h2><p>对于<strong>服务型集群</strong>，可以提供两种方式的对外访问：</p>
<ul>
<li><p>串行的方式：挂载集群中的某个节点的目录，然后所有的通信都通过这个节点执行。</p>
</li>
<li><p>并行访问：</p>
<p>  客户端最开始会挂载在某个节点上，但是只是通过这个节点获取元数据信息，客户端可以并行的访问从多个节点中读写数据。</p>
<ul>
<li>对称模式下的并行<br><img src="http://upload-images.jianshu.io/upload_images/1323506-3da128de25e8c0a9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></li>
<li>非对称模式下的并行<br><img src="http://upload-images.jianshu.io/upload_images/1323506-3cfad636b406130f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></li>
</ul>
</li>
</ul>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-2181a3bba971673c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<h1 id="集群文件系统中的关键问题"><a href="#集群文件系统中的关键问题" class="headerlink" title="集群文件系统中的关键问题"></a>集群文件系统中的关键问题</h1><p>集群本质是一堆服务器合作处理任务，这一点集群块存储系统与集群文件存储系统没有区别。但是当我们面对的不是单一节点以后，会多出很多的问题， 比如说能不能用统一的目录对后端的文件进行访问，比如说多主机对某个文件访问的时候会不会有冲突，还有就是每台设备都会缓存数据，会不会有缓存不一致的情况。</p>
<p>下面我们将一一讲解</p>
<h2 id="统一命名空间（Single-Name-Space）"><a href="#统一命名空间（Single-Name-Space）" class="headerlink" title="统一命名空间（Single Name Space）"></a>统一命名空间（Single Name Space）</h2><p>如果我们要访问某个文件，则需要知道文件的路径，也就是说文件是在哪个目录里面，比如windows下面的路径”D:\data\file.txt”，或者Linux下面的”/usr/someone/file.txt”。windows和Linux文件系统的设计方式不同，所以路径看上去也不同。</p>
<ul>
<li><p>Windows默认为以各个分区做为入口，所以路径开始会指明是在那个<strong>分区</strong>里面。</p>
</li>
<li><p>而Linux是以全局为入口，所以开头是根目录”/“，而各个分区都<code>挂载</code>到某个目录下，比如分区sda2挂载到<code>/home/mnt</code>下面。那么如果我们进入到<code>/home/mnt</code>，其实就相当于进入了sda2分区文件系统的根入口。同理Windows也可以把<strong>分区</strong>挂载到某个目录下。</p>
</li>
</ul>
<p>如果我们把一个目录挂载到另一个目录下面，这个<strong>被挂载</strong>的目录就可以称为<code>虚拟目录</code>。也就是说通过虚拟目录访问到的不是原本属于此目录下的文件，而是挂载在其上的目录树。</p>
<p>所以虚拟目录更应该理解为<strong>一个路径</strong>，它只是提供一个路牌，路牌上的路名不等于路的本身，只是一个名字而已。</p>
<p>现在我们来看一个集群环境下的情况。</p>
<p>每个节点都有各自的<code>路径</code>，但是既然多节点组成了集群，对外应该呈现为一套路径。</p>
<p>比如说客户端看到路径<code>/cluster/data1</code>，而这个路径真实应该在节点A上。不管向集群中哪个节点发出请求，所有的请求都应该重定向到节点A来，收到请求的节点就相当于一个<strong>代理</strong>而已。也就是说已经被某节点使用的路径，不能再被其他节点所使用了。</p>
<p>这就是统一命名空间（Single Name Space）：集群中的所有节点上供客户端挂载的路径不重复，对外呈现为单一的NAS服务器。</p>
<p>这就是与非集群环境下最大区别。非集群下，两台NAS设备有同一个路径，而且对外可见，那么客户端可以挂在两个不同的独立存储空间，这样当然管理起来很麻烦。</p>
<p><strong>那么怎么实现统一命名空间呢</strong>？有两种形式</p>
<ul>
<li><p>单一路径影像（Single Path Image）：</p>
<p>  节点只需要管理自己的文件系统空间，然后在上面加一个<strong>中间层</strong>，可以把多个文件系统虚拟为同一个空间。比如/a和/b虚拟化为一个/c，这种方式就是单一路径镜像。</p>
<p>  这种方式下，每个节点其实只能看到自己节点上的路径，如果收到了访问其他节点目录的请求，应该将请求<strong>重定向</strong>到另外的节点上，当然处理的结果还是由收到请求的节点返回给客户端，这样做的目的是保证对客户端的透明。</p>
</li>
<li><p>单一文件系统影像（Single FileSystem Image）</p>
<p>  单一路径影像只是在路径上进行了一层虚拟化，所以可以对外呈现出单一的虚拟目录。而单一文件系统影像更彻底，它想将所有节点的文件系统进行融合，所以它会在本地文件系统（如EXT3）上加了一层虚拟化逻辑，这样就改变本地文件系统的逻辑，比如可以这样，客户端看来，某个文件在/fs/a上面，但是实际上有可能前半端在节点A，后半段在节点B。</p>
<p>因为文件系统已经<strong>“彻底”</strong>融合了，所以集群中的每个节点都知道所有文件的存放位置和状态，所以这种模式下，收到客户端IO请求的<strong>节点</strong>会对IO进行解析，然后就知道数据应该落到哪些节点上，最后把IO拆分后发到对应的集群节点上进行读取或者写入。而不是像单一路径影像那样将请求重定向到其他节点上。</p>
</li>
</ul>
<p>总之单一路径影像属于松耦合，更利于节点的扩充。而单一文件系统影像是把文件系统都融合了起来，属于紧耦合，扩展性不好，实现难度大。</p>
<h2 id="集群中的分布式锁机制"><a href="#集群中的分布式锁机制" class="headerlink" title="集群中的分布式锁机制"></a>集群中的分布式锁机制</h2><p>在单节点的的单一操作系统内，可能有多个应用程序对同一个文件进行修改，这样极有可能出现数据不一致的情况，于是我们引入了<code>锁</code>，这样一个文件在同一时刻只允许这个应用程序修改，其他应用程序只能等待。</p>
<p>这样又会出现一个问题，若干某个文件加锁了，却迟迟未被处理，其他应用程序就只能等待，时间自然就白白浪费了。</p>
<p>锁也不是，不锁也不是，那么有没有两全其美的方法呢？</p>
<p>当然有，比如</p>
<ul>
<li><p>字节锁：</p>
<p>  程序只是把某端或者某些字节加锁了，所以多个程序可以并行的读写文件的不同部分。这样锁的粒度就降低了，可以并行的读写同一文件，性能自然得到提高。</p>
</li>
<li><p>集群中的分布式锁</p>
<p>  集群其实可以看作一台大的独立系统，集群外的客户端相当于应用程序，因为有并行，自然也需要锁。</p>
<p>  但是集群是由多个节点组成的，维护锁需要由哪些节点负责呢？一般有两种方式</p>
<ul>
<li><p>集群中所有节点选一个节点负责锁的维护，这就是<code>集中式锁管理</code>，用于非对称式集群</p>
</li>
<li><p>所有节点共同维护锁，锁的信息在节点上同步，这就是<code>分布式锁管理</code>，用于对称式集群。</p>
</li>
</ul>
</li>
<li><p>元数据锁</p>
<p>  如果一个集群中，所有的节点的角色对等，而且共享存储，那么此时所有的节点掌握着文件系统元数据，而且是实时同步的。</p>
<p>  那么当节点要为某个文件分配空间的时候，需要把<strong>相关的元数据</strong>锁住。为什么呢？因为如果不锁住，如果此时其他节点也在分配空间，则两个节点分配的空间可能有冲突。</p>
<p>  那么当一个节点要分配数据了，可以利用<strong>分布式锁机制</strong>通知其他节点，位图已经由它掌控了。当然分配完成之后，还要再与其他节点同步一下自己的元数据缓存。</p>
</li>
</ul>
<h2 id="缓存一致性"><a href="#缓存一致性" class="headerlink" title="缓存一致性"></a>缓存一致性</h2><p>我们知道集群的节点会维护一个<strong>读缓存</strong>，所以一个节点有可能缓存其他节点的某些内容。那么就存在一种情况，某一时刻节点存储的内容被应用<code>修改</code>了，但是这段内容的读缓存有可能在其他的节点上，如果此时有终端读到了缓存里面的内容，则出现与实际数据不一致的情况。</p>
<p>那么怎么办？可以把<strong>读缓存的数据作废或者读入新数据以更新</strong>,这就是<code>写即作废</code>机制，可以保证全局缓存一致性。</p>
<p>那写缓存呢？</p>
<ul>
<li><p>对于有<strong>共享存储</strong>的集群，</p>
<p>  最好不开写缓存，也就是写入的时候最好要直接写到磁盘上再返回成功，就好比公用物品必须放回原处，别人才能继续用，而不能只是放到自己的缓存。</p>
<p>  如果实在要使用写缓存也可以，当写的数据放到了缓存里面以后，需要立刻通知到集群中其他节点。那么其他节点要对这段数据进行操作的话，需要与此节点进行联系。不过这就需要花费沟通成本来保证缓存一致性了。</p>
</li>
<li><p>如果集群没有共享存储</p>
<p>  写入的数据都缓存在本节点中，其他节点要访问数据的话，必须联系数据的拥有者，不存在不一致的问题。</p>
</li>
<li><p>如果集群文件系统是对外提供服务的，那么写缓存最好关闭，因为集群节点没有类似SAN磁盘阵列的掉电保护机制，一旦掉电，则数据丢失。</p>
</li>
</ul>
<p><img src="http://upload-images.jianshu.io/upload_images/1323506-24f7ab844b784e37.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<h1 id="集群、并行、分布式、共享文件系统辨析"><a href="#集群、并行、分布式、共享文件系统辨析" class="headerlink" title="集群、并行、分布式、共享文件系统辨析"></a>集群、并行、分布式、共享文件系统辨析</h1><p>大家平时可能听到多种叫法：集群文件系统、SAN共享文件系统、分布式文件系统、并行文件系统。这些概念之间是否有什么联系呢？</p>
<ul>
<li><p>SAN共享文件系统：指的是共享存储集群文件系统。又可简称为<code>SAN文件系统</code></p>
</li>
<li><p>分布式文件系统：可以等价于<code>非共享存储</code>集群文件系统，也就是说同一个文件系统下的文件是存放在不同的节点里面</p>
</li>
<li><p>并行文件系统：可以提供<code>并行</code>访问的集群文件系统，一般需要在主机客户端上安装一个<code>代理</code>或者新的文件系统挂载器，专门实现并行访问。</p>
<p>  分布式不一定代表着并行，但是并行一定是分布的。并行文件系统</p>
</li>
<li><p>集群文件系统：分布式文件系统、并行文件系统、共享文件系统统称为<code>集群文件系统</code>。</p>
<p>  <code>分布式</code>和<code>共享式</code>指的是数据分布的方式，而<code>并行</code>指的是用户对数据的访问方式。</p>
</li>
</ul>
<h1 id="集群NAS"><a href="#集群NAS" class="headerlink" title="集群NAS"></a>集群NAS</h1><p>在<a href="https://www.jianshu.com/p/469c27b6cf3b" target="_blank" rel="noopener">【大话存储】学习笔记（10~13章），NAS、IP SAN</a>这一章中，我们讲到了NFS/CIFS协议，它们是<strong>网络文件访问系统</strong>，主要的作用是让主机可以通过网络的访问NFS服务器上的文件，所以它其实不是管理文件与扇区的对应关系的。</p>
<p>而FAT、NTFS是实实在在的文件系统，是管理文件与块的对应关系的，我们称为<strong>文件管理系统</strong></p>
<p>那么现在我们要构建一个集群NAS，希望他能对外提供文件访问服务。</p>
<ul>
<li><p>最底层仍然使用NTFS、EXT3等文件管理系统，主要来管理文件与块的对应关系，</p>
</li>
<li><p>然后在上面增加一层集群文件系统，主要用来管理集群的元数据信息</p>
</li>
<li><p>再包裹一层NFS就可以对外提供文件服务了，形成了分布式并行文件系统。</p>
</li>
</ul>
<p>如下图所示<br><img src="http://upload-images.jianshu.io/upload_images/1323506-6ea944363fa48bac.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="image.png"></p>
<p>可以看出一个集群NAS系统其实可以分为三层架构</p>
<ul>
<li><p>第一层：底层存储空间层，可以是Share Everything（共享型）或者Share Nothing（非共享型）</p>
</li>
<li><p>第二层：集群文件系统层，它建立在共享型或者非共享型存储空间之上</p>
<ul>
<li><p>如果底层存储是共享型的话，一般文件系统层都使用Single Filesystem Image。</p>
</li>
<li><p>如果底层存储使用非共享型，则既可使用Single Path Image ,又可使用Single Filesytem Image模式。</p>
</li>
</ul>
</li>
<li><p>第三层：NAS协议输出层，可以有四种访问模式：传统CIFS，传统NFS，pNFS并行客户端，并行或者串行访问。</p>
</li>
</ul>
<p>总结一下，将集群文件系统中的文件用NAS协议输出，就是<strong>集群NAS。</strong>它可以对外提供统一的命名空间，以及统一管理，若是出现了故障，还可以进行故障的切换，在线平稳的迁移等。</p>
<p>所以集群NAS不是简单的NAS设备的堆砌，它可以更加的灵活，比如</p>
<ul>
<li><p>集群NAS有统一命名空间</p>
<p>  比如某个应用程序需要在一个目录下放几十万个小文件，如果要把这么多文件放到传统的NAS的同一目录下，性能相当的低。</p>
<p>  如果我们把文件分散到不同的目录呢，虽然可以并发读取小文件，但是每个文件存放的路径必须对主机可见，麻烦的事就来了，我们必须得修改应用程序来适应这么多目录。</p>
<p>  此时集群NAS的统一命名空间就非常有用了，我们之前说过，统一命名空间指的是对外呈现统一的虚拟目录，屏蔽了底层的细节。具体做法是将文件系统承载于多个Segment，每个Segment又分配到不同的Segment Server上，这样主机只需要挂载一个目录，而且还不影响性能。</p>
</li>
<li><p>统一管理、故障切换、在线迁移。如果集群NAS设备之间共享存储则</p>
<ul>
<li><p>集群NAS可以随时将负载过高的节点上的Segment迁移到负载低的，因为这些Segment Server之间共享存储，所以不涉及到数据移动的过程。</p>
</li>
<li><p>独立的NAS  Server发生故障，所管理的数据就无法访问了，但是集群NAS因为共享存储，所以在某节点故障之后，可以由正常节点进行接管（后端Segment以及IP地址等），</p>
</li>
</ul>
</li>
</ul>

    </div>

    
    
    

      <footer class="post-footer">

        

          <div class="post-nav">
            <div class="post-nav-next post-nav-item">
                <a href="/2017/11/15/%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%882%E7%AB%A0%EF%BC%89%EF%BC%8C-SSD/" rel="next" title="大话存储，学习笔记（2章），SSD">
                  <i class="fa fa-chevron-left"></i> 大话存储，学习笔记（2章），SSD
                </a>
            </div>

            <span class="post-nav-divider"></span>

            <div class="post-nav-prev post-nav-item">
                <a href="/2019/11/15/%E5%A4%A7%E8%AF%9D%E5%AD%98%E5%82%A8%EF%BC%8C%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%EF%BC%8811%E7%AB%A0%EF%BC%89%EF%BC%8CTCP-IP/" rel="prev" title="大话存储，学习笔记（11章），TCP-IP">
                  大话存储，学习笔记（11章），TCP-IP <i class="fa fa-chevron-right"></i>
                </a>
            </div>
          </div>
      </footer>
    
  </article>
  
  
  

  </div>


          </div>
          

        </div>
          
  
  <div class="toggle sidebar-toggle">
    <span class="toggle-line toggle-line-first"></span>
    <span class="toggle-line toggle-line-middle"></span>
    <span class="toggle-line toggle-line-last"></span>
  </div>

  <aside class="sidebar">
    <div class="sidebar-inner">

      <ul class="sidebar-nav motion-element">
        <li class="sidebar-nav-toc">
          Table of Contents
        </li>
        <li class="sidebar-nav-overview">
          Overview
        </li>
      </ul>

      <!--noindex-->
      <div class="post-toc-wrap sidebar-panel">
          <div class="post-toc motion-element"><ol class="nav"><li class="nav-item nav-level-1"><a class="nav-link" href="#集群文件系统"><span class="nav-number">1.</span> <span class="nav-text">集群文件系统</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#是否共享LUN"><span class="nav-number">1.1.</span> <span class="nav-text">是否共享LUN</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#是否引入IO节点"><span class="nav-number">1.2.</span> <span class="nav-text">是否引入IO节点</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#角色是否对等"><span class="nav-number">1.3.</span> <span class="nav-text">角色是否对等</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#是否对外提供服务"><span class="nav-number">1.4.</span> <span class="nav-text">是否对外提供服务</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#统一路径型与统一文件系统型集群"><span class="nav-number">1.5.</span> <span class="nav-text">统一路径型与统一文件系统型集群</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#串行与并行集群"><span class="nav-number">1.6.</span> <span class="nav-text">串行与并行集群</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#集群文件系统中的关键问题"><span class="nav-number">2.</span> <span class="nav-text">集群文件系统中的关键问题</span></a><ol class="nav-child"><li class="nav-item nav-level-2"><a class="nav-link" href="#统一命名空间（Single-Name-Space）"><span class="nav-number">2.1.</span> <span class="nav-text">统一命名空间（Single Name Space）</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#集群中的分布式锁机制"><span class="nav-number">2.2.</span> <span class="nav-text">集群中的分布式锁机制</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#缓存一致性"><span class="nav-number">2.3.</span> <span class="nav-text">缓存一致性</span></a></li></ol></li><li class="nav-item nav-level-1"><a class="nav-link" href="#集群、并行、分布式、共享文件系统辨析"><span class="nav-number">3.</span> <span class="nav-text">集群、并行、分布式、共享文件系统辨析</span></a></li><li class="nav-item nav-level-1"><a class="nav-link" href="#集群NAS"><span class="nav-number">4.</span> <span class="nav-text">集群NAS</span></a></li></ol></div>
      </div>
      <!--/noindex-->

      <div class="site-overview-wrap sidebar-panel">
        <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
  <p class="site-author-name" itemprop="name">dy2903</p>
  <div class="site-description" itemprop="description"></div>
</div>
<div class="site-state-wrap motion-element">
  <nav class="site-state">
      <div class="site-state-item site-state-posts">
          <a href="/archives/">
        
          <span class="site-state-item-count">20</span>
          <span class="site-state-item-name">posts</span>
        </a>
      </div>
      <div class="site-state-item site-state-tags">
        <span class="site-state-item-count">2</span>
        <span class="site-state-item-name">tags</span>
      </div>
  </nav>
</div>
  <div class="feed-link motion-element">
    <a href="/atom.xml" rel="alternate">
      <i class="fa fa-rss"></i>RSS
    </a>
  </div>



      </div>

    </div>
  </aside>
  <div id="sidebar-dimmer"></div>


      </div>
    </main>

    <footer class="footer">
      <div class="footer-inner">
        

<div class="copyright">
  
  &copy; 
  <span itemprop="copyrightYear">2019</span>
  <span class="with-love">
    <i class="fa fa-user"></i>
  </span>
  <span class="author" itemprop="copyrightHolder">dy2903</span>
</div>
  <div class="powered-by">Powered by <a href="https://hexo.io/" class="theme-link" rel="noopener" target="_blank">Hexo</a> v4.0.0
  </div>
  <span class="post-meta-divider">|</span>
  <div class="theme-info">Theme – <a href="https://pisces.theme-next.org/" class="theme-link" rel="noopener" target="_blank">NexT.Pisces</a> v7.5.0
  </div>

        












        
      </div>
    </footer>
  </div>

  
  <script src="/lib/anime.min.js"></script>
  <script src="/lib/velocity/velocity.min.js"></script>
  <script src="/lib/velocity/velocity.ui.min.js"></script>
<script src="/js/utils.js"></script><script src="/js/motion.js"></script>
<script src="/js/schemes/pisces.js"></script>
<script src="/js/next-boot.js"></script>



  
















  

  

</body>
</html>
